]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
gdmUtil: Add API to add/remove credential managers
authorAlessandro Bono <alessandro.bono369@gmail.com>
Wed, 3 Aug 2022 13:34:10 +0000 (15:34 +0200)
committerMarge Bot <marge-bot@gnome.org>
Mon, 23 Jan 2023 20:37:46 +0000 (20:37 +0000)
Extensions don't need to poke at the internal this._credentialManagers
variable in order to add their own credential manager.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2399>

js/gdm/util.js

index 1c2a40cd6e8b56e6631d051eeda035ca34df8b1d..3d535659ce82fdba44c4592032580305c5abc9be 100644 (file)
@@ -179,18 +179,32 @@ var ShellUserVerifier = class extends Signals.EventEmitter {
         this._unavailableServices = new Set();
 
         this._credentialManagers = {};
-        this._credentialManagers[OVirt.SERVICE_NAME] = OVirt.getOVirtCredentialsManager();
-        this._credentialManagers[Vmware.SERVICE_NAME] = Vmware.getVmwareCredentialsManager();
 
-        for (let service in this._credentialManagers) {
-            if (this._credentialManagers[service].token) {
-                this._onCredentialManagerAuthenticated(this._credentialManagers[service],
-                    this._credentialManagers[service].token);
-            }
+        this.addCredentialManager(OVirt.SERVICE_NAME, OVirt.getOVirtCredentialsManager());
+        this.addCredentialManager(Vmware.SERVICE_NAME, Vmware.getVmwareCredentialsManager());
+    }
+
+    addCredentialManager(serviceName, credentialManager) {
+        if (this._credentialManagers[serviceName])
+            return;
 
-            this._credentialManagers[service].connectObject('user-authenticated',
-                this._onCredentialManagerAuthenticated.bind(this), this);
+        this._credentialManagers[serviceName] = credentialManager;
+        if (credentialManager.token) {
+            this._onCredentialManagerAuthenticated(credentialManager,
+                credentialManager.token);
         }
+
+        credentialManager.connectObject('user-authenticated',
+            this._onCredentialManagerAuthenticated.bind(this), this);
+    }
+
+    removeCredentialManager(serviceName) {
+        let credentialManager = this._credentialManagers[serviceName];
+        if (!credentialManager)
+            return;
+
+        credentialManager.disconnectObject(this);
+        delete this._credentialManagers[serviceName];
     }
 
     get hasPendingMessages() {
@@ -262,11 +276,8 @@ var ShellUserVerifier = class extends Signals.EventEmitter {
         this._smartcardManager.disconnectObject(this);
         this._smartcardManager = null;
 
-        for (let service in this._credentialManagers) {
-            let credentialManager = this._credentialManagers[service];
-            credentialManager.disconnectObject(this);
-            credentialManager = null;
-        }
+        for (let service in this._credentialManagers)
+            this.removeCredentialManager(service);
     }
 
     selectChoice(serviceName, key) {